Software applications, during execution, may utilize various types of resources on the system upon which the application is executed as well as resources located elsewhere. For example, an application may read from or write to a file stored on a storage device on the system executing the application. In another case, the application may manipulate data that is resident in the system's memory. In yet another example, the application may read a web page located on a server connected with the system executing the application via a network such as the Internet.
To locate and access these resources, applications implement various well-known or custom protocols. These protocols and the locations of the resources are identified in a Uniform Resource Identifier (URI). Typically, the source code of an application accessing a given resource includes a hard-coded URI that includes a protocol identified at the beginning of a URI and further indicates the location of the resource in a fully qualified path. For example, the application may use a protocol such as “res:” to load resources embedded in the application as Win32® resources. In another example, the application may use HyperText Transfer Protocol (“http:”) to load resources over a network. The protocols identified in these URIs are followed by the location of the resource. For example, a resource located on an Internet web page may be identified by the fully qualified URI “http://www.resources.com/resource1.html.”
One drawback of this approach is that changes in application packaging decisions require changes to the fully qualified URIs hard-coded in the source code of the application. For example, if a software provider wishes to change the location of a resource from being resident in the memory of the system executing the application to being stored on a network, all URIs for that resource must be changed in the source code of the application. Given the size of many application programs, such a rewrite is tedious and time consuming. This approach therefore does not provide an effective, easy to use way to allow the source URIs used in an application to be independent of packaging decisions. It is with respect to these considerations and others that the present invention has been made.